﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using Librerias;
using System.Collections;

//Autor: Arturo Serna


namespace Librerias
{
    /// <summary>
    /// Clase que persiste los Eventos
    /// </summary>
    public class CADEvento
    {
        SqlConnection con;

        /// <summary>
        /// Constructor de CADEvento. 
        /// Únicamente establece la conexión con la base de datos
        /// </summary>
        public CADEvento() 
        {
            con = new SqlConnection(CADConexion.connString);
        }

        /// <summary>
        /// A partir de una asignatura obtiene sus eventos, independientemente del profesor.
        /// </summary>
        /// <param name="idAsig"></param>
        /// <returns></returns>
        public DataTable ConsultaEventos(string idAsig)
        {
            DataTable res = new DataTable();

            try
            {
                con.Open();
                string select = "select * from eventoasig where eveAsigCodigo = '" + idAsig
                                + "' order by eveAsigDate desc";
                SqlDataAdapter adaptadorSQL = new SqlDataAdapter(select, con);
                adaptadorSQL.Fill(res);

            }
            catch (SqlException ex)
            {
                res = null;
                throw ex;
            }
            finally
            {
                con.Close();
            }

            return res;
        }


        /// <summary>
        /// A partir de una asignatura obtiene sus eventos, independientemente del profesor.
        /// </summary>
        /// <param name="idAsig"></param>
        /// <returns></returns>
        public DataTable ConsultaEventosWeb(string idAsig)
        {
            DataTable res = new DataTable();

            try
            {
                con.Open();
                string select = "select * from eventoasig where eveAsigCodigo = '" + idAsig
                                + "' order by eveAsigDate desc";
                SqlDataAdapter adaptadorSQL = new SqlDataAdapter(select, con);
                adaptadorSQL.Fill(res);

            }
            catch (SqlException ex)
            {
                res = null;
                throw ex;
            }
            finally
            {
                con.Close();
            }

            return res;
        }




        /// <summary>
        /// Obtiene todos los eventos de las asignaturas que pasan por parámetro
        /// </summary>
        /// <param name="todasMisAsigntaturas">ArrayList de strings con el código de la asignatura</param>
        /// <returns></returns>
        public DataTable ConsultaEventos(ArrayList todasMisAsigntaturas)
        {
            DataTable res = new DataTable();

            if (todasMisAsigntaturas.Count > 0)
            {
                con.Open();

                string select = "select * from eventoasig where eveAsigCodigo = '" + todasMisAsigntaturas[0].ToString() + "'";

                for (int i = 1; i < todasMisAsigntaturas.Count; i++)
                {
                    select += " or eveAsigCodigo = '" + todasMisAsigntaturas[i].ToString() + "'";
                }

                select  += " order by eveAsigDate desc";

                SqlDataAdapter adaptadorSQL = new SqlDataAdapter(select, con);
                adaptadorSQL.Fill(res);

                con.Close();
            }

            return res;
        }

        /// <summary>
        /// A partir de una asignatura obtiene sus eventos, aplicando los filtros de búsqueda seleccionados
        /// </summary>
        /// <param name="idAsig"></param>
        /// <param name="cadena"></param>
        /// <param name="tipo"></param>
        /// <returns></returns>
        public DataTable ConsultaEventos(string idAsig, string cadena, int tipo)
        {
            DataTable res = new DataTable();

            try
            {
                con.Open();
                string select = "select * from eventoasig where eveAsigCodigo = '" + idAsig;

                switch (tipo)
                {
                    case 0:
                        select += "' and eveAsigAsunto like '%" + cadena + "%'";
                        break;
                    case 1:
                        select += "' and eveAsigTexto like '%" + cadena + "%'";
                        break;
                    case 2:
                        select += "' and (CONVERT(varchar(20), eveAsigF_ini, 20))  like '%" + FormateaFecha(cadena) + "%'";
                        break;
                    case 3:
                        select += "' and (CONVERT(varchar(20), eveAsigF_fin, 20))  like '%" + FormateaFecha(cadena) + "%'";
                        break;
                }
                select += " order by eveAsigDate desc";

                SqlDataAdapter adaptadorSQL = new SqlDataAdapter(select, con);
                adaptadorSQL.Fill(res);

            }
            catch (SqlException ex)
            {
                res = null;
                throw ex;
            }
            finally
            {
                con.Close();
            }

            return res;
        }

        /// <summary>
        /// Entra una fecha en formato 12/03/2012 07:01 y sale 2012-03-12 07:01
        /// </summary>
        private string FormateaFecha(string entrada)
        {
            //Elimina espacios al principio y al final.
            entrada = entrada.Trim();

            string dia = "", mes = "", ano = "", res = entrada;



            int i = 0;
            if (entrada.Contains("/"))
            {

                //Extrae dia
                while (i < entrada.Length && entrada[i] != '/')
                {
                    dia += entrada[i];
                    i++;
                }
                if (dia.Length == 1)
                {
                    dia = "0" + dia;
                }
                i++; 

                //Extrae mes
                while (i < entrada.Length && entrada[i] != '/')
                {
                    mes += entrada[i];
                    i++;
                }
                if (mes.Length == 1)
                {
                    mes = "0" + mes;
                }
                i++;

                //Extrae ano
                while (i < entrada.Length && entrada[i] != ' ')
                {
                    ano += entrada[i];
                    i++;
                }

                res = ano + "-" + mes + "-" + dia;

                if (entrada.Contains(':'))
                {
                    while (i < entrada.Length)
                    {
                        res += entrada[i];
                        i++;
                    }
                }
            }

            return res;
        }

        /// <summary>
        /// Crea un nuevo evento.
        /// </summary>
        /// <param name="en"></param>
        /// <returns></returns>
        public int CrearEvento(ENEventoAsignatura en)
        {
            int res = -1;

            try
            {
                con.Open();

                SqlCommand com = new SqlCommand("insert into eventoasig (eveAsigCorreo, eveAsigCodigo, eveAsigDate, eveAsigAsunto, eveAsigTexto, eveAsigF_ini, eveAsigF_fin) values('" +
                                                    en.Correo + "','" +
                                                    en.Codigo + "','" +
                                                    en.Fecha + "','" +
                                                    en.Asunto + "','" +
                                                    en.Texto + "','" +
                                                    en.FechaInicio + "','" +
                                                    en.FechaFin + "');", con);
                res = com.ExecuteNonQuery();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                con.Close();
            }

            return res;
        }

        /// <summary>
        /// Elimina un evento a partir de su ID
        /// </summary>
        /// <param name="idEvento"></param>
        /// <returns></returns>
        public int EliminarEvento(int idEvento)
        {
            int res = -1;

            try
            {
                con.Open();

                SqlCommand com = new SqlCommand("delete from eventoasig where eveAsigId = '"+idEvento+"'", con);
                res = com.ExecuteNonQuery();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                con.Close();
            }

            return res;
        }

        /// <summary>
        /// Actualiza un evento
        /// </summary>
        /// <param name="datos"></param>
        /// <returns></returns>
        public int ModificarEvento(ENEventoAsignatura datos)
        {
            int res = -1;

            try
            {
                con.Open();

                SqlCommand com = new SqlCommand("update eventoasig set "+
                                                "eveAsigAsunto='" + datos.Asunto +
                                                "',eveAsigTexto='" + datos.Texto +
                                                "', eveAsigF_ini='" + datos.FechaInicio +
                                                "', eveAsigF_fin='" + datos.FechaFin + 
                                                "' where eveAsigId='" + datos.Id + "';", con);
                res = com.ExecuteNonQuery();
            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                con.Close();
            }

            return res;
        }
        /*
        public object[] GetEvento(string idEvento)
        {
            DataSet tabla = new DataSet();
            object[] res = null;
            try
            {
                con.Open();

                SqlDataAdapter adaptadorSQL = new SqlDataAdapter("select * from eventoasig where eveAsigId = " + idEvento, con);
                adaptadorSQL.Fill(tabla);

                res = tabla.Tables[0].Rows[0].ItemArray;


            }
            catch (SqlException ex)
            {
                throw ex;
            }
            finally
            {
                con.Close();
            }

            return res;
        }*/
    }
}
